Ana içeriğe geç

Pyteal Araçlarının Kullanılması

Hadi ilk Pyteal kodumuzu yazarak başlayalım. Bu işlem için "counter" klasörü içerisine girilir ve içerisindeki tüm dosyalar silinerek "step_01.py" adında bir dosya oluşturulur. Her Algorand Akıllı kontratı temel olarak 2 parça Teal kodu içermektedir. Bunlar onayla anlamına gelen "approvel" ve temizle anlamına gelen "clear" dosyaları olmaktadır. Bu dosyalar Python üzerinde fonksiyon olarak gösterilir ancak çalıştırıldıklarında ".teal" uzantılı dosyalar olmaktadırlar.

 def approval():pass 

Tablo 130

Kod dosyasının içerisine girildiğinde ilk olarak "approval" fonksiyonu ile başlanması gerekmektedir. Bu fonksiyonu Tablo 130'da ifade edildiği üzere Python içerisinde bulunan def metodu ile tanımlamaktayız. Fonksiyon içerisine parametre olarak herhangi bir değer almamaktadır. Fonksiyonun içerisine girildiğinde "pass" anahtar kelimesi ile karşılaşılmaktadır. Bu komut fonksiyonun içerisine girildiğinde direkt olarak çıkılmasını sağlamaktadır.

 def approval():passdef clear():pass 

Tablo 131

Aynı işlemi Tablo 131'de ifade edildiği üzere "clear" için de yapmamız gerekmektedir. Bu sayede akıllı kontratı oluşturan tüm basamaklar tamamlanmış olunur. Clear fonksiyonu da aynı "approval" gibi içine parametre almayarak direkt olarak fonksiyondan çıkış sağlar.

 import importlibimport sys
from pyteal\_helpers import program
if \_\_name\_\_ == "\_\_main\_\_":mod = sys.argv[1]
try:approval\_out = sys.argv[2]except IndexError:approval\_out = None
try:clear\_out = sys.argv[3]except IndexError:clear\_out = None
contract = importlib.import\_module(mod)
if approval\_out is None:print(program.application(contract.approval()))else:with open(approval\_out, "w") as h:h.write(program.application(contract.approval()))
if clear\_out is not None:with open(clear\_out, "w") as h:h.write(program.application(contract.clear()))

Tablo 132 compile.py

Oluşturduğumuz dosyanın Teal koduna "compile" edilmesi için bir "compiler" yani derleyici yapısı gerekmektedir. Bu işlemi project klasörü içerisinde bulunan compile.py dosyası halletmektedir. Bu dosya içerisinde yer alan Tablo 132'de belirletilen koda baktığımızda kontrat içerisinde bulunan "approval" ve "clear" fonksiyonlarını çağırdığını gözlemeyebiliriz. Fonksiyonu çağırırken "pyteal_helpers" kütüphanesi içerisinde çalışan program metodu kullanılmaktadır.

 #!/usr/bin/env bash
mkdir -p ./build/# cleanrm -f ./build/\*.teal
set -e # die on error
python ./compile.py "$1" ./build/approval.teal ./build/clear.teal

Tablo 133 build.sh

Derlenen bu kodlar build.sh dosyası içerisinde bulunan ve Tablo 133'te ifade edilen terminal komutları sayesinde oluşturulan "./build" klasörü içerisine "approval.teal" ve "clear.teal" dosyaları olarak kaydedilir.

Artık akıllı kontrat içerisine küçük bir Pyteal komutu yazmaya başlayabiliriz. Bunun için yazılabilecek en basit Pyteal kodu olan gelen tüm işlemleri onaylayan bir kontrat yazılabilir.

 from pyteal import \* 

Tablo 134

İlk olarak Python dosyası içerisine tüm Pyteal fonksiyonlarını Tablo 134'de ifade edildiği üzere ekleyerek başlanılabilir. Yıldız (*) yapısı ile çağırılan kütüphane içerisindeki bütün fonksiyonlar başlarına Pyteal ibaresi eklenmeden çağırabilecek hale gelmektedir.

 from pyteal import \*
def approval():return Approve()def clear():return Approve()

Tablo 135

Gelen tüm işlemlerin onaylanması için oluşturulduğumuz "approval" ve "clear" fonksiyonları içerisinde "Approve()" fonksiyonunun "return" edilmesi gerekmektedir. Bu sayede fonksiyona gelen bilgi ne olursa olsun fonksiyon bu bilgiye bakmadan işlemi onaylayacaktır. Bu şekilde Tablo 135' ifade edildiği üzere fonksiyon tamamlanmış hale gelmektedir.

 ./build.sh contracts.counter.step\_01 

Tablo 136

Tamamlanan fonksiyonu project klasörü içerisinde bulunan terminalde Tablo 136'da belirtildiği şekilde çalıştırabiliriz. Bazı işletim sistemlerinde bu kod erişim izni hatası verebilmektedir. Bu nedenle baş kısmına "sudo" komutunun eklenmesi dosyayı yönetici olarak açmamızı sağlar ve izin hatalarını ortadan kaldırır.

Derlenen kod project klasörü içerisinde yeni bir "build" klasörü oluşturmaktadır. Bu klasör içerisinde iki adet Teal dosyası bulunmaktadır. Bu dosyalar "approval.teal" ve "clear.teal" dosyaları olmaktadır.

 #pragma version 5int 1return 

Tablo 137 approval.teal

 #pragma version 5int 1return 

Tablo 138 clear.teal

Her iki fonksiyon için de aynı kod yazılmasından dolayı her iki teal dosyası da Tablo 137'de ve Tablo 138'de ifade edildiği üzere aynı kodu içermektedir. Bu kodları satır satır anlatmamız gerekirse:

  • İlk olarak Teal dilinin versiyonu belirtilmektedir. Kodumuz içerisinde yazım aşamasında en güncel sürüm olan 5 sürümü kullanılmaktadır.
  • Alt satıra inildiğinde integer bir 1 değerinin yer aldığı görünmektedir. Algorand akıllı kontratları bir transferin geçerli veya geçerli olmadığına karar verirken programın çıkış yaparken ki ifade ettiği bit değerine bakarlar. Eğer bu bit değeri 1 ise transfer geçerlidir ancak bu değer 1 değerinin dışında herhangi bir değer ise transfer geçersiz olmaktadır.
  • Son olarak akıllı kontratı kapatmak için "return" komutu kullanılmaktadır. Bu sayede akıllı kontrat tamamlanmış olacaktır.

Yazılan bu kontrat önüne çıkan tüm transferleri onaylamaktadır.